<?php
/**
 * Created by PhpStorm.
 * User: s.utkin
 * Date: 24.10.14
 * Time: 13:13
 */

namespace Pinenut;


class Session
{
	/**
	 * Признак того, что сессия запущена
	 *
	 * @var bool
	 */
	protected static $isStarted = false;

	/**
	 * Запускает сессию
	 *
	 * @return bool
	 */
	protected  static function start()
	{
		if (!static::$isStarted) {
			\Log::begin(null, 'Application');
			static::$isStarted = session_start();
			\Log::end('Session Start');
		}

		return static::$isStarted;
	}

	protected  static function stop()
	{
		
		if (static::$isStarted) {
			static::$isStarted = null;
			session_write_close();
		}
	
	}
	
	/**
	 * Возвращает иденификатор сессии
	 *
	 * @return string
	 */
	public static function getId()
	{
		static::start();
		$id = session_id();
		static::stop();
		return $id;
	}

	/**
	 * Получает значение из сессии
	 *
	 * @param string $key - имя ключа
	 * @param mixed $default - значение по умолчанию, если ключ не найден
	 * @return mixed
	 */
	public static function getValue($key, $default = null)
	{
		static::start();
		$value = isset ($_SESSION[$key]) ? $_SESSION[$key] : $default;
		static::stop();
		return $value;
	}

	/**
	 * Записывает значение в сессию по ключу
	 *
	 * @param string $key - имя ключа
	 * @param mixed $value - значение, записываемое в сессию
	 */
	public static function setValue($key, $value)
	{
		static::start();
		$_SESSION[$key] = $value;
		static::stop();
	}

	/**
	 * Удаляет ключ и значение из сессии
	 *
	 * @param $key - имя ключа
	 */
	public static function unsetValue($key)
	{
		static::start();
		unset ($_SESSION[$key]);
		static::stop();
	}
}